#pragma once

#include "UIEventSet.h"

namespace LSH
{
namespace GUI
{
class Window;

class WindowEventArgs : public EventArgs{
public:
    WindowEventArgs(Window* pWindow):_pWindow(pWindow)
    {
    }
protected:
    Window* _pWindow;
};

class Window : public EventSet
{
public:
    static const String EventParentSized;
    static const String EventSized;
    static const String EventMoved;
    static const String EventAlphaChanged;
    static const String EventActivated;
    static const String EventDeactivated;
    static const String EventEnabled;
    static const String EventDisabled;
    static const String EventShown;
    static const String EventHidden;
    static const String EventInputCaptureGained;
    static const String EventInputCaptureLost;
    static const String EventChildAdded;
    static const String EventChildRemoved;
    static const String EventZOrderChanged;
    static const String EventMouseEnters;
    static const String EventMouseLeaves;
    static const String EventMouseMove;
    static const String EventMouseWheel;
    static const String EventMouseButtonDown;
    static const String EventMouseButtonUp;
    static const String EventMouseClick;
    static const String EventMouseDoubleClick;
    static const String EventMouseTripleClick;
    static const String EventKeyDown;
    static const String EventKeyUp;
    static const String EventCharacterKey;
public:
    Window(const String& name);
    virtual ~Window(void);


    void destroy();

    virtual void onMoved(WindowEventArgs& e);
    virtual void onSized(WindowEventArgs& e);
    virtual void onParentSized(WindowEventArgs& e);

    void addChildWindow(const String& name);
    void addChildWindow(Window* window);
    void removeChildWindow(Window* window);

private:
   // Array<Window*> _childs;

    String _name;
};

}
}



